import crypto from "crypto";

// 自定义的缓存类
export class SecureCache {
  constructor() {
    this.cache = new Map(); // 存储缓存的键值对
  }

  // 使用SHA256创建安全的缓存键
  // 1. 提示词
  // 2. 该提示词对应的答案
  _createSecureKey(prompt, llmString) {
    const data = `${prompt}_${llmString}`;
    return crypto.createHash("sha256").update(data).digest("hex");
    // hash 算法两个特点：
    // 1. 无论给它的字符串多长，最终生成的结果的长度是固定的
    // 2. 同样的字符串，得到的结果也一定是一样的
  }

  // 根据提示词和内容来查询缓存
  async lookup(prompt, llmString) {
    const key = this._createSecureKey(prompt, llmString);
    return this.cache.get(key); // 获取缓存
  }

  // 更新缓存内容
  async update(prompt, llmString, returnVal) {
    const key = this._createSecureKey(prompt, llmString);
    this.cache.set(key, returnVal);
  }

  async clear() {
    this.cache.clear();
  }
}
